<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>New关键字</title>
</head>
<body>
  <h2>New关键字</h2>
</body>
<script>
  // 构造函数 => 新创建的对象
  function Person() {
    this.name = "张三丰"
    this.fn = function() {
      console.log(`名字是：${this.name}`);
    }
  }

  let person1 = new Person();
  person1.fn();

  // 1、创建一个空对象
  // let obj = Object.create(null) // 没有_proto_ 这种更适合只是保存一些临时的值，效率更高
  // let obj2 = {};

  // 1、创建一个空对象
  let obj = new Object(); // Object => 基类

  // 2、设置它的原型链
  obj._proto_ = Person.prototype;

  // 3、改变this的指向
  let result = Person.call(obj);

  // 4、判断返回值类型
  if (typeof (result) == 'object') {
    person1 = result; // 如果他是引用类型，就返回这个引用类型的对象
  } else {
    person1 = obj;
  }


</script>
</html>